import i18n from '../i18n';

/**
 * 获取国际化文本的工具方法
 * @param {string} key - 翻译键名，支持嵌套路径如 'common.ok' 或 'settings.language'
 * @param {object} options - 可选参数
 * @param {string} options.defaultValue - 当找不到翻译时的默认值
 * @param {object} options.interpolation - 插值参数对象
 * @param {string} options.lng - 指定语言代码，不传则使用当前语言
 * @returns {string} 翻译后的文本
 */
export const getI18nText = (key, options = {}) => {
  const { defaultValue, interpolation, lng } = options;
  
  try {
    // 使用 i18n.t 方法获取翻译
    const translation = i18n.t(key, {
      defaultValue: defaultValue || key,
      lng,
      ...interpolation
    });
    
    return translation;
  } catch (error) {
    console.warn(`I18n translation error for key: ${key}`, error);
    return defaultValue || key;
  }
};

/**
 * 检查指定键名是否存在翻译
 * @param {string} key - 翻译键名
 * @param {string} lng - 可选，指定语言代码
 * @returns {boolean} 是否存在翻译
 */
export const hasI18nKey = (key, lng) => {
  try {
    return i18n.exists(key, { lng });
  } catch (error) {
    console.warn(`I18n key check error for: ${key}`, error);
    return false;
  }
};

/**
 * 获取当前语言代码
 * @returns {string} 当前语言代码
 */
export const getCurrentLanguage = () => {
  return i18n.language;
};

/**
 * 获取所有可用的语言列表
 * @returns {array} 语言代码数组
 */
export const getAvailableLanguages = () => {
  return Object.keys(i18n.options.resources || {});
};

/**
 * 批量获取多个翻译文本
 * @param {array} keys - 翻译键名数组
 * @param {object} options - 可选参数
 * @returns {object} 键值对对象，键为原始key，值为翻译文本
 */
export const getBatchI18nTexts = (keys, options = {}) => {
  const result = {};
  
  keys.forEach(key => {
    result[key] = getI18nText(key, options);
  });
  
  return result;
};

/**
 * 格式化带参数的翻译文本
 * @param {string} key - 翻译键名
 * @param {object} params - 参数对象
 * @param {object} options - 其他可选参数
 * @returns {string} 格式化后的翻译文本
 */
export const formatI18nText = (key, params = {}, options = {}) => {
  return getI18nText(key, {
    ...options,
    interpolation: params
  });
};

// 默认导出主要的获取方法
export default getI18nText;

// // 在组件中使用
// import { getI18nText, hasI18nKey, formatI18nText } from '../utils/i18nUtils';

// // 基本使用
// const okText = getI18nText('common.ok');
// const cancelText = getI18nText('common.cancel');

// // 使用默认值
// const unknownText = getI18nText('unknown.key', { 
//   defaultValue: '未知文本' 
// });

// // 检查键是否存在
// if (hasI18nKey('settings.language')) {
//   console.log('语言设置键存在');
// }

// // 带参数的翻译
// const welcomeText = formatI18nText('welcome.message', {
//   name: '用户名',
//   count: 5
// });

// // 指定语言获取翻译
// const englishText = getI18nText('common.ok', { lng: 'en' });